package com.fenqile.pop;

import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;

/**
 * 业务参数基类，实现类代表一个远程接口，泛型 {@code R} 表示此接口的返回类型
 * 
 * @author Coby [cobylin@live.com] 2017
 */
public abstract class BusinessParameter<R> {
	
	protected final Type resultType;
	
	public BusinessParameter() {
		
		Type currentSuperClass = getClass().getGenericSuperclass();
		while (currentSuperClass instanceof Class) {
			currentSuperClass = ((Class<?>)currentSuperClass).getGenericSuperclass();
		}
		resultType = ((ParameterizedType)currentSuperClass).getActualTypeArguments()[0];
		
	}
	
	/**
	 * 获取接口方法名称
	 * @return 接口方法名称
	 */
	public abstract String getApiMethod();
	
	/**
	 * 获取接口响应类型
	 * @return 接口响应类型
	 */
	public Type getResultType() {
		return resultType;
	}
	
}
